#include "initvalues.h"
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QDomDocument>
#include <QDomNode>
#include <QDomNodeList>
#include <QDomElement>
#include <QFile>
#include <QVariant>
#include "dcpp/Util.h"
#include "globaldefinition.h"

using namespace dcpp;

template<class T>
T getValue(const QString &constName, const T &defValue, const QDomDocument &doc){
    QDomNodeList list = doc.documentElement().elementsByTagName(constName);
    if(list.isEmpty()){
        qDebug()<<QObject::trUtf8("Для константы %0 нет значения.").arg(constName);
        return defValue;
    }else{
        for(int i = 0; i < list.size(); ++i){
            if(list.at(i).isElement()){
                QVariant v(list.at(i).toElement().text());
                if(v.canConvert<T>())
                    return v.value<T>();
                else{
                    qDebug()<<QObject::trUtf8("Не удалось получить значение %0 из %1").arg(constName).arg(v.toString());
                    return defValue;
                }
            }
        }
    }
}

InitValues::InitValues()
{
    QDomDocument doc;
    QFile file(qApp->applicationDirPath() + QDir::separator() + "InitValues.xml");
    if (!file.open(QIODevice::ReadOnly))
        return;
    if (!doc.setContent(&file)) {
        file.close();
        return;
    }

    const QString defMainHubURL = "dc.krasfiles.ru";
    const uint defMaxChatSize = 100;
    m_mainHubURL = getValue<QString>("mainHubURL", defMainHubURL, doc).trimmed();
    if(m_mainHubURL.isEmpty())
        m_mainHubURL = defMainHubURL;
    m_maxChatSize = getValue<uint>("maxChatSize", defMaxChatSize, doc);
    if(m_maxChatSize <= 0)
        m_maxChatSize = defMaxChatSize;

    file.close();
}

const QString & InitValues::mainHubURL(){
    return m_mainHubURL;
}

uint InitValues::maxChatSize() const{
    return m_maxChatSize;
}
